from html.parser import HTMLParser
'''
使用时需要定义一个从模块html.parser中的类HTMLParser继承的类，重定义函数：
handle_starttag(tag, attrs) ，处理开始标签，比如<div>；这里的attrs获取到的是属性列表，属性以元组的方式展示
handle_endtag(tag) ，处理结束标签,比如</div>
handle_startendtag(tag, attrs) ，处理自己结束的标签，如<img />
handle_data(data) ，处理数据，标签之间的文本
handle_comment(data) ，处理注释，<!-- -->之间的文本
————————————————
'''

class MyHTMLParser(HTMLParser):

    def handle_starttag(self, tag, attrs):
        """
        识别开始标签，例如 <div>
        :param tag:
        :param attrs:
        :return:
        """
        print("遇到开始标签:", tag)

    def handle_endtag(self, tag):
        """
        识别结束标签，比如</div>
        :param tag:
        :return:
        """
        print("遇到结束标签:", tag)

    def handle_data(self, data):
        """
        识别数据, html content string
        :param data:
        :return:
        """
        print("遇到一些数据:", data)

    def handle_startendtag(self, tag, attrs):
        """
        识别没有结束标签的标签，比如<img />
        :param tag:
        :param attrs:
        :return:
        """
        print("遇到没有结束标签的标签:", tag)

    def handle_comment(self,data):
        """
        处理注释，<!-- -->之间的文本
        :param data:
        :return:
        """
        print("遇到注释标签:", data)


parser = MyHTMLParser()
# 向解析器馈送数据
parser.feed('<html>'
            '<head><title>Test</title></head>'
            '<body>'
            '<h1>Parse me!</h1>'
            '<img src = "" />'
            '<!-- comment -->'
            '</body></html>')